package cn.itcast.nems.common.enumeration;

import lombok.Getter;

/**
 * 
 * 编号格式：前缀 + 连接符 + 日期 + （RANDOM_LONG｜RANDOM_STR）
 *
 * @author 刘曙
 *
 * @version 
 *
 * @since 2023年11月19日
 */
@Getter
public enum BizNumberTypeEnum {
    /** 订单号，示例：OD2311192128828422 */
    ORDER("OD", "", true, true, false),
    /** 订单退费单号 */
    ORDER_REFUND("TF", "", true, true, false),
    /** 订单支付流水号 */
    ORDER_PAYMENT_FLOW("ZF", "", true, true, false),
    /** 订单支付收据编号 */
    ORDER_PAYMENT_RECEIPT("CZBK", "", true, true, false),
    /** 学籍ID，示例：XJ-7EXK7V */
    STUDENT_RECORD_NO("XJ", "-", false, false, true),
    /** 升班凭单，示例：SJ-7EXK7V */
    RENEWAL("SJ", "-", false, false, true),
    /** 转班凭单，示例：ZB-7EXK7V */
    TRANSFER("ZB", "-", false, false, true),
    /** 休学凭单，示例：XX-7EXK7V */
    SUSPENSION("XX", "-", false, false, true),
    /** 待定班，示例：DD-7EXK7V */
    DELAY("DD", "-", false, false, true),
    /** 优惠单，示例：YH-7EXK7V */
    DISCOUNT("YH", "-", false, false, true),
    /** 应收调价单，示例：TJ-7EXK7V */
    RECEIVABLE_ADJUSTMENT("TJ", "-", false, false, true),
    /** 退学凭单-头，示例：TX-I2Z8D8*/
    JOURNAL_DROPOUT("TX", "-", false, false, true),
    /** 重读凭单 */
    JOURNAL_REPEAT("CD", "-", false, false, true),
    /** 退费凭单 */
    REFUND("TF", "-", false, false, true),
    /** 学籍唯一code；为保护学籍ID不泄漏，主要用于该学籍统一的支付链接，示例：1BNW3T */
    STUDENT_RECORD_UNIQUE_CODE("", "", false, false, true),
    /** 结课凭单，示例：JK-8EXZ8V */
    FINAL("JK", "-", false, false, true),
    /** 改期凭单-头，示例：GQ-I2Z8D8*/
    CHANGE_DATE("GQ", "-", false, false, true),
    /** 费用转移凭单-头，示例：ZY-I2Z8D8*/
    FUND_TRANSFER("ZY", "-", false, false, true),
    /** 快捷报名业务订单号，示例：EQ2311192128828422 */
    ENROL_QUICK("EQ", "", true, true, false),
    /** 默认10位hash long值，示例：2311191452941693 */
    DEFAULT("", "", false, true, false)
    ;

    /** 前缀 */
    private final String prefix;
    /** 连接符 */
    private final String symbol;
    /** 编号内是否包含日期 */
    private final boolean isContainDate;
    /** 10位Long Hash */
    private final boolean isLongHash10Digit;
    /** 6位Base36随机字符串 */
    private final boolean isRandomBase36Str6Digit;
    
    BizNumberTypeEnum(String prefix, String symbol, boolean isContainDate, boolean isLongHash10Digit, boolean isRandomBase36Str6Digit) {
        this.prefix = prefix;
        this.symbol = symbol;
        this.isContainDate = isContainDate;
        this.isLongHash10Digit = isLongHash10Digit;
        this.isRandomBase36Str6Digit = isRandomBase36Str6Digit;
    }
}
